<--- %%NOBANNER%% --> parsdt.sas
 BackForward

/*-------------------<-- Start of Description-->---------------------\
| Check a datetime variable;                                         |
| Input variable must be a string;                                   |
|---------------------<-- End of Description-->----------------------|
|--------------------------------------------------------------------|
|------------<-- Start of Files or Arguments Needed-->---------------|
| Arguments neede:                                                   |
|    _datestr : input variable; Required;                            |
|    _newdate : the output date variable name; Required;             |
|    _newtime : the output time variable name; Required;             |
|    sql      : where is this function used, within a sql statement  |
|               or within a datastep;                                |
|---------------<-- End of Files Arguments Needed-->-----------------|
|--------------------------------------------------------------------|
|------------------<-- Start of Files Created-->---------------------|
| Usage: %parsedt(_datestr, _newdate, _newtime, sql);                |
\-------------------<-- End of Files Created-->---------------------*/
%macro parsedt(_datestr, _newdate, _newtime, sql);
/*--------------------------------------------\
| Copy Right: Duo Zhou;                       |
| Created:  3-11-2002 9:32pm;                 |
| Purpose: Parse a datetime variable;         |
\--------------------------------------------*/
%if (%quote(%upcase(&sql)) eq SQL) %then %do;
   datepart(input(substr(&_datestr, 5,2)||substr(&_datestr,1,3)||substr(&_datestr,8,4)||"/"||
               substr(&_datestr,13,8)||"."||substr(&_datestr,22,3)||" "||
               substr(&_datestr,25,2),datetime40.)) as &_newdate,
   timepart(input(substr(&_datestr, 5,2)||substr(&_datestr,1,3)||substr(&_datestr,8,4)||"/"||
               substr(&_datestr,13,8)||"."||substr(&_datestr,22,3)||" "||
               substr(&_datestr,25,2),datetime40.)) as &_newtime
%end;
%else %if (%quote(%upcase(&sql)) ne SQL) %then %do;
   _y_ = input(substr(&_datestr, 5,2)||substr(&_datestr,1,3)||substr(&_datestr,8,4)||"/"||
               substr(&_datestr,13,8)||"."||substr(&_datestr,22,3)||" "||
               substr(&_datestr,25,2),datetime40.) ;
   &_newdate = datepart(_y_) ;
   &_newtime = timepart(_y_) ;
   format &_newtime time. &_newdate date.;
   drop _y_;
%end;
%mend parsedt;